{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "###########From pyDesignML35/chp08\n",
    "import os\n",
    "os.chdir(\"/home/lab466/pythons/pyDesignML35/ch08\")\n",
    "# %run "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.947375\n"
     ]
    }
   ],
   "source": [
    "#P154  50 decision tree classifier\n",
    "from sklearn.ensemble import BaggingClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn import datasets\n",
    "\n",
    "bcls=BaggingClassifier(DecisionTreeClassifier(),max_samples=0.5, max_features=0.5, n_estimators=50)\n",
    "X,y=datasets.make_blobs(n_samples=8000,centers=2, random_state=0,cluster_std=4)\n",
    "bcls.fit(X,y)\n",
    "print(bcls.score(X,y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lab466/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "# conda install mkl\n",
    "#P155    voteClassDemo\n",
    "# %run voteClassDemo.py\n",
    "\n",
    "from sklearn import cross_validation\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import ExtraTreesClassifier\n",
    "from sklearn.ensemble import VotingClassifier\n",
    "from sklearn import datasets\n",
    "\n",
    "def vclas(w1,w2,w3, w4):\n",
    "    X , y = datasets.make_classification(n_features= 30,n_redundant=15, n_informative=4, n_samples=500, n_clusters_per_class=3)\n",
    "    Xtrain,Xtest, ytrain,ytest= cross_validation.train_test_split(X,y,test_size=0.4)\n",
    "    \n",
    "    clf1 = LogisticRegression(random_state=123)\n",
    "    clf2 = GaussianNB()\n",
    "    clf3 = RandomForestClassifier(n_estimators=10,bootstrap=True, random_state=123)\n",
    "    clf4= ExtraTreesClassifier(n_estimators=10, bootstrap=True,random_state=123)    \n",
    "    \n",
    "    clfes=[clf1,clf2,clf3,clf4]\n",
    "    \n",
    "    eclf = VotingClassifier(estimators=[('lr', clf1), ('gnb', clf2), ('rf', clf3),('et',clf4)],\n",
    "                            voting='soft',\n",
    "                            weights=[w1, w2, w3,w4])\n",
    "    \n",
    "   \n",
    "    [c.fit(Xtrain, ytrain) for c in (clf1, clf2, clf3,clf4, eclf)]\n",
    "    \n",
    "    N = 5  \n",
    "    ind = np.arange(N)  \n",
    "    width = 0.3  \n",
    "    \n",
    "    fig, ax = plt.subplots()\n",
    "    \n",
    "    for i, clf in enumerate(clfes):\n",
    "        print(clf,i)\n",
    "        p1=ax.bar(i,clfes[i].score(Xtrain,ytrain,), width=width,color=\"black\")\n",
    "        p2=ax.bar(i+width,clfes[i].score(Xtest,ytest,), width=width,color=\"grey\")\n",
    "    \n",
    "    ax.bar(len(clfes)+width,eclf.score(Xtrain,ytrain,), width=width,color=\"black\")\n",
    "    ax.bar(len(clfes)+width *2,eclf.score(Xtest,ytest,), width=width,color=\"grey\")\n",
    "    \n",
    "    \n",
    "    # plot annotations\n",
    "    \n",
    "    plt.axvline(3.8, color='k', linestyle='dashed')\n",
    "    ax.set_xticks(ind + width)\n",
    "    ax.set_xticklabels(['LogisticRegression',\n",
    "                        'GaussianNB',\n",
    "                        'RandomForestClassifier',\n",
    "                        'ExtraTrees',\n",
    "                        'VotingClassifier'],\n",
    "                       rotation=40,\n",
    "                       ha='right')\n",
    "    #plt.ylim([0, 1])\n",
    "    plt.title('Training and test score for different classifiers')\n",
    "    plt.legend([p1[0], p2[0]], ['training', 'test'], loc='lower left')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
      "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
      "          penalty='l2', random_state=123, solver='liblinear', tol=0.0001,\n",
      "          verbose=0, warm_start=False) 0\n",
      "GaussianNB(priors=None) 1\n",
      "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
      "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
      "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
      "            min_samples_leaf=1, min_samples_split=2,\n",
      "            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
      "            oob_score=False, random_state=123, verbose=0, warm_start=False) 2\n",
      "ExtraTreesClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
      "           max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
      "           min_impurity_decrease=0.0, min_impurity_split=None,\n",
      "           min_samples_leaf=1, min_samples_split=2,\n",
      "           min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
      "           oob_score=False, random_state=123, verbose=0, warm_start=False) 3\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lab466/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n",
      "/home/lab466/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n",
      "  if diff:\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nzj///FU9aq6//npuuOEGjjrqKHbbbTceffRRpkyZwiuvvMLJJ5/MihUr2H333fnhD38IwMKFCxk7\ndiyTJk0CYPjw4Wy77bbceuutmBmzZs2ibdu2APTv33/VwhVjx45lxYoV3Hnnnbz99tvcdtttdOjQ\ngSOOOIKlS5ey4447stNOOzFmzJhW//cQkeqlSuEmGDNmDKNGjWLUqFHccMMNADz44IP06dOHKVOm\nAPDSSy9x+umnc+2113L77bc3dDjeeOMN5s6dS58+fXjggQfWuN+CBQu4++67Oe6445g1axb//Oc/\n6dmzJ3PnzuWpp55S4heRJlPJv5m23357Bg4cuOr5hhtuyGWXXUb79u3X2uX0W9/6FgBdu3blgw/W\nvMbNN7/5Tcxs1X7du3fngQceYN999+WUU07J5o2ISE1R8m+itm3brho45e5svPHGH3v9yiuvZOTI\nkey8885rnYtkk002adQ5y/f785//zFlnncURRxzRhMhFRFZTtU8T7bPPPtxyyy0MGjSIe++99xOv\nH3jggZxxxhkMHz6c9u3bs3jx4sxj2HXXXRk5ciT77rsvRx999KoeSCJFNHnyZCZPnpx3GIVT1SV/\nd693+7x581rsnB07duT6669f9byu7r/O4MGDGTx48Cf+rlevXqsae4GPPR47duzH9q1r7C1/bfjw\n4QBcffXVbLvttrRp04bly5ezdGm9i6eJFELPnj3zDqGQqjr516rjjz+e448/Pu8wRFrF1KlTARg6\ndGjOkRSLkr+IVLQrrrgCUPLPmur8RURqkJK/iEgNUvIXEalBVV3nP27cuEyPd+ihh651n3Wd2G32\n7Nn06tWLXr16rUtoIiKZqurkn4d1ndht9uzZ9O/fX8lfpInKu1NLNpT8m6B8YrfJkydzyimn8Oqr\nr9K7d28uuOACli1bxgknnMDy5cvZZZddGD9+PKeccgr33nsv06dPp3fv3lx33XU5vxOR6tG5c+e8\nQygkJf8mGDNmzKrVsYYOHcrVV1/NjjvuyNVXX813vvMdHn/8cZ577jl23HFHzjvvPP70pz+xcuVK\nLrvsMq666ir69+9P//79830TIlWmdCZcyY4afJvhmWeeYcaMGRx11FE8//zzLF68mAEDBgDwjW98\ng6efflqraYk006RJkz42Il6yoZJ/E5VO7LbNNtuw6667MnToUG677Ta6devGfffdx+GHH84Xv/hF\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff39e7a2898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "vclas(1,2,3,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"\\n#在sklearn上读取人脸数据集保存图片到本地\\nfrom numpy.random import RandomState\\nimport matplotlib.pyplot as plt\\nimport matplotlib.image as mpimg\\nfrom sklearn.datasets import fetch_olivetti_faces\\n# Load faces data \\ndataset = fetch_olivetti_faces(shuffle=True)\\nfaces = dataset.data\\nrow,col = np.shape(faces)\\nfor i in range(row):\\n    facename = 'face/face'+str(i)+'.jpg'\\n    mpimg.imsave(facename,faces[i,:].reshape(64,64),cmap=plt.cm.gray)\\n\""
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "#在sklearn上读取人脸数据集保存图片到本地\n",
    "from numpy.random import RandomState\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.image as mpimg\n",
    "from sklearn.datasets import fetch_olivetti_faces\n",
    "# Load faces data \n",
    "dataset = fetch_olivetti_faces(shuffle=True)\n",
    "faces = dataset.data\n",
    "row,col = np.shape(faces)\n",
    "for i in range(row):\n",
    "    facename = 'face/face'+str(i)+'.jpg'\n",
    "    mpimg.imsave(facename,faces[i,:].reshape(64,64),cmap=plt.cm.gray)\n",
    "'''\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#P158    ExtraTreeClassify\n",
    "# %run extraTreesClassDemo.py\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.datasets import fetch_olivetti_faces\n",
    "from sklearn.ensemble import ExtraTreesClassifier\n",
    "\n",
    "data = fetch_olivetti_faces()\n",
    "\n",
    "def importance(n_estimators=500,max_features=128\n",
    ",n_jobs=3, random_state=0):   \n",
    "    X = data.images.reshape((len(data.images), -1))\n",
    "    y = data.target      \n",
    "    forest = ExtraTreesClassifier(n_estimators,max_features=max_features, n_jobs=n_jobs, random_state=random_state)                                    \n",
    "    forest.fit(X, y)    \n",
    "    dstring=\" cores=%d...\" % n_jobs + \" features=%s...\" % max_features +\"estimators=%d...\" %n_estimators + \"random=%d\" %random_state  \n",
    "    print(dstring)\n",
    "    importances = forest.feature_importances_\n",
    "    importances = importances.reshape(data.images[0].shape)\n",
    "    plt.matshow(importances, cmap=plt.cm.hot)\n",
    "    plt.title(dstring)\n",
    "    #plt.savefig('etreesImportance'+ dstring + '.png')\n",
    "    plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " cores=3... features=128...estimators=500...random=0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ny/S5MdWb8XsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff398c2b668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7ff398b1c2b0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff398beb748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#P162     AdaBoost\n",
    "# %run boostDemo.py\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.datasets import make_blobs\n",
    "\n",
    "plot_colors = \"br\"\n",
    "plot_step = 0.02\n",
    "class_names = \"AB\"\n",
    "tree= DecisionTreeClassifier()\n",
    "boost=AdaBoostClassifier()\n",
    "#X,y=make_blobs(n_samples=200,centers=2, random_state=0, cluster_std=2)\n",
    "\n",
    "X,y=make_blobs(n_samples=500,centers=2, random_state=0, cluster_std=2)\n",
    "boost.fit(X,y)\n",
    "plt.figure(figsize=(10, 5))\n",
    "\n",
    "# Plot the decision boundaries\n",
    "plt.subplot(121)\n",
    "x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1\n",
    "y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),\n",
    "                     np.arange(y_min, y_max, plot_step))\n",
    "\n",
    "Z = boost.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "Z = Z.reshape(xx.shape)\n",
    "cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)\n",
    "plt.axis(\"tight\")\n",
    "\n",
    "\n",
    "for i, n, c in zip(range(2), class_names, plot_colors):\n",
    "    idx = np.where(y == i)\n",
    "    plt.scatter(X[idx, 0], X[idx, 1],\n",
    "                c=c, cmap=plt.cm.Paired,\n",
    "                label=\"Class %s\" % n)\n",
    "plt.title('Decision Boundary')                \n",
    "                \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff398bb2c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "twoclass_output = boost.decision_function(X)\n",
    "plot_range = (twoclass_output.min(), twoclass_output.max())\n",
    "plt.subplot(122)\n",
    "for i, n, c in zip(range(2), class_names, plot_colors):\n",
    "    plt.hist(twoclass_output[y == i],\n",
    "             bins=20,\n",
    "             range=plot_range,\n",
    "             facecolor=c,\n",
    "             label='Class %s' % n,\n",
    "             alpha=.5)\n",
    "x1, x2, y1, y2 = plt.axis()\n",
    "plt.axis((x1, x2, y1, y2))\n",
    "plt.legend(loc='upper left')\n",
    "plt.ylabel('Samples')\n",
    "plt.xlabel('Score')\n",
    "plt.title('Decision Scores')\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Accuracy =0.858000\n"
     ]
    }
   ],
   "source": [
    "print(\"Mean Accuracy =%f\" % boost.score(X,y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nkvSFEMKH/H9kg4j/ac3KNwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff39881cc88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#P164   Gradient boosting\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import ensemble\n",
    "from sklearn.cross_validation import train_test_split\n",
    "from sklearn import datasets\n",
    "def gbt(params, X,y,ls):\n",
    "    clf = ensemble.GradientBoostingClassifier(**params)\n",
    "    clf.fit(X_train, y_train)\n",
    "    cumsum = np.cumsum(clf.oob_improvement_)\n",
    "    n = np.arange(params['n_estimators'])\n",
    "    oob_best_iter = n[np.argmax(cumsum)]\n",
    "    plt.xlabel('Iterations')\n",
    "    plt.ylabel('Improvement')\n",
    "    plt.axvline(x=oob_best_iter,linestyle=ls)\n",
    "    plt.plot(n, cumsum, linestyle=ls)\n",
    "\n",
    "X,y=datasets.make_blobs(n_samples=50,centers=5, random_state=0, cluster_std=5)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5,random_state=9)\n",
    "\n",
    "p1 = {'n_estimators': 1200, 'max_depth': 3, 'subsample': 0.5,'learning_rate': 0.01, 'min_samples_leaf': 1, 'random_state':3}\n",
    "p2 = {'n_estimators': 1200, 'max_depth': 3, 'subsample': 0.5,'learning_rate': 0.001, 'min_samples_leaf': 1, 'random_state':3}\n",
    "\n",
    "gbt(p1, X,y, ls='--')\n",
    "gbt(p2, X,y, ls='-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
